package com.wonders;

import javax.servlet.AsyncContext;

import java.io.IOException;
import java.io.PrintWriter;

import static java.lang.Thread.sleep;

/**
 * 模拟耗时任务
 */
public class Task1 implements Runnable {
    private AsyncContext asyncContext;

    Task1(AsyncContext asyncContext) {
        this.asyncContext = asyncContext;
    }

    @Override
    public void run() {
        try {
            PrintWriter out = asyncContext.getResponse().getWriter();
            out.append("子线程开始运行<br>");
            for (int i = 0; i < 20; i++) {
                System.out.println("i == " + i);
                out.append("i == " + i + "<br>");
                sleep(1000);
                // 开启for循环下的注释，并注释36行asyncContext.complete();
                // asyncContext调用complete后，只是告知容器该请求的异步上下文执行完
                // 成，可以把响应结果返回给客户端了。complete后异步上下文中的线程并没有被执
                // 行完成，但是整个交互环境（asyncContext）已经算是无效了，不管线程中做什么，两个
                // 重要的交互对象request和response都已经离开了，线程在做什么都视为已经和请求响应无关。
//                if (i == 6) {
//                    asyncContext.complete();
//                }
//                System.out.println(asyncContext);
            }
            out.append("子线程运行结束<br>");
            asyncContext.complete();
        } catch (InterruptedException e) {
            System.out.println(e);
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}
